<?php
/** .-------------------------------------------------------------------
 * |  Software: [HDPHP framework]
 * |      Site: www.hdphp.com  www.hdcms.com
 * |-------------------------------------------------------------------
 * |    Author: 向军 <2300071698@qq.com>
 * |    WeChat: aihoudun
 * | Copyright (c) 2012-2019, www.houdunwang.com. All Rights Reserved.
 * '-------------------------------------------------------------------*/

namespace app\home\controller;

use houdunwang\request\Request;
use system\model\Module;
class Entry
{
    public function index()
    {
        //http://www.zhouxufu.com/index.php?m=xufu&student=controller/stu/index
        //测试自己定义xufu目录中类是否可以自动加载到，需要结合composer.json来处理
        //(new \xufu\student\controller\Stu())->index();
        //(new \addons\pic\controller\Add())->add();


        //1运用模块
       $res = $this->runModule();
        //1(7)这个判断：当运行了模块中的类方法，就不让代码继续往下走了
        if ( $res !== false ) {
            return $res;
        }
        return View::with('framework', 'HDPHP')->make();
    }

    protected function runModule()
    {
        //参考下面
        //1(1)http://www.zhouxufu.com/index.php?m=pic&action=controller/add/add
        //(new \addons\pic\controller\Add())->add();
        $m = Request::get( 'm' );
        //p($m);//pic
        //1(8),为了考虑，如果你数据库没有这个模块，那么addons/不会有这个模块，没必要实例化了
        $module = Module::where( 'module_name' , $m )->first();
        //1.（2）这个是地址传的一个参数，是根据你$m传的那个目录里所调用的文件的路径
        $action = Request::get( 'action' );
        //p($action);//controller/add/add
        //1(3)注意：$module,是在后来增加的
        //当参数值都存在时，进入判断
        if($module && $m && $action)
        {
            //1(4)把action转为数组形式
            $info = explode( '/' , $action );
            //p($info);
            /*Array
            (
                [0] => controller
                [1] => add
                [2] => add
            )*/
            //1(5)这个是固定寻找addons目录里面的文件里的方法
            //$class = "\addons\\" . $m . '\\' . $info[ 0 ] . '\\' . ucfirst( $info[ 1 ] );
           // (new $class)->add();//我是add类下的add方法
            //1(9)对1.5进行修改，系统模块需要去module里面实例化
            //p($module);
            $class = ( $module[ 'module_is_system' ] == 1 ? 'module' : 'addons' ) . "\\" . $m . '\\' . $info[ 0 ] . '\\' . ucfirst( $info[ 1 ] );
            //当你$module数据库参数中的module_is_system==1时就走module目录，否则走addons目录
            //p($class);die;//module\base\controller\Wx
            ////1(6)返出实例化过后路径中的方法
//            p($class);die;
            return call_user_func_array( [ new $class , $info[ 2 ] ] , [] );
        }
        //1(7)返回false时，说明有参数没有成功，就不用进入下一步了
        return false;
    }
}